本系列文的主旨,是在討論開發企業資訊系統時,和資料庫的串接方式,也就是如何連上資料庫並取得資料。至於取得資料後,美化排版並顯示在各式的端點設備上,這屬於前端開發的議題,本文不多著墨。
這個議題也是每一個程式開發工具都必須具備的功能,關於資料庫存取的技術,近一點來說,主要有 2個大方向
區域網路的連線字串方式
網際網路的 RESTFul API 架構
在 Restful API 這種因應網際網路無狀態,所演化出來的前後端完全分離的存取架構前,完全就是 [連線字串式] 連接資料庫的天下,也是主流技術。現在應該也還是大部分 Client/Server AP 及網站的主要核心技術。
無論是 Client/Server 或是網站後台(如 PHP、ASP.NET 等),使用連線設定的方式大同小異,大致上就是
1.確認連接字串
2.建立SqlConnection
3.確認查詢字串
4.DataSet 承接回傳的資料(或執行 sql command)
下面參考網路上的一些範例如下
C# 的設定方式
try
{
// step 1 . 宣告連接字串
string Constr = @"Persist Security Info=False;Integrated Security=true;
Initial Catalog=NorthWind;Server=.\SQLExpress";
// step 2 . 建立SqlConnection
SqlConnection conn = new SqlConnection(Constr);
// step 3 . 宣告查詢字串
string Sqlstr = "select * from zen_customer";
// step 4. 建立SqlDataAdapter
SqlDataAdapter da = new SqlDataAdapter(Sqlstr, conn);
// step 5. 建立DataSet來儲存Table
DataSet ds = new DataSet();
// step 6. 將DataAdapter查詢之後的結果,填充至DataSet
da.Fill(ds);
// step 7 . 用DataGridView1 顯示出來
this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
PHP 的設定範例
<?php
$dbhost = '127.0.0.1';
$dbuser = 'mysql_user';
$dbpass = 'mysql_password';
$dbname = 'mysql_databaseName';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error with MySQL connection');
mysql_query("SET NAMES 'utf8'");
mysql_select_db($dbname);
$sql = "SELECT * FROM `zen_customer` WHERE `cname` like 'Michael';";
$result = mysql_query($sql) or die('MySQL query error');
while($row = mysql_fetch_array($result)){
echo $row['name'];
}
?>
關於 RESTful API 的定義,請參考維基百科的定義說明
https://zh.wikipedia.org/wiki/%E8%A1%A8%E7%8E%B0%E5%B1%82%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2
講得通俗一點,就是透過 http(精確說是 url 就是一串網址),去後端主機取得資料或資源的一種網路服務。
我在前面的
Day21:一招半式闖江湖(一):通用 api 架構說明及第一支通用 api
Day22:一招半式闖江湖(二):再論通用 API 及實作範例
有簡單的說明,請先參閱。
下面是一段 Vue.js 前端呼叫 api 的範例
getData() {
const params = {
para01: 'zen_department',
para02: 'did',
para03: 'P',
para04: `${this.cur_page}^${this.cur_size}^did^*^dname like ''%${this.fulltextsearch}%''^basm01`
}
this.$axios.post('/api/orm_api/1/', qs.stringify(params)).then((res) => {
this.loading = false;
if(res.length && res[0]){
this.tableData = res[0];
if(typeof res[0][0] === 'object'){
this.total = res[0][0]._TotalRec;
}
}
})
},
資料庫連線方式從早期的
ado -> odbc(jdbc) -> ado.net -> RESTful API
不斷的演進,目前看來,RESTful API 遲早會一統江湖,又因為它只是一個架構,並無強制規範,所以可以自行實作,可以說是優點多多,建議各位應盡可能地轉換到此架構。感謝您的收看,明天繼續加油。